package colecoes;

import interfaces.InterfacePessoaFuncionario;

import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
import java.util.Vector;

import fachada.JDBC;
import basicas.PessoaFuncionario;

public class ColPessoaFuncionario implements InterfacePessoaFuncionario {
	
	Vector funcionarios = new Vector();
	
	
	
	/*  ------- Metodos Essenciais do sistema -------  */
	// Cadastra recebendo um objeto como parametro
	public void cadastrarPessoaFuncionario(PessoaFuncionario F) 
	throws ClassNotFoundException, SQLException{
		String sql = "insert into pessoafuncionario (email, codendereco, telefone, telefone2, matricula, nome, funcao, login, senha) values ('"+
		F.getEmail()+"',"+
		F.getEnd().getCodEndereco()+",'"+
		F.getTelefone()+"','"+
		F.getTelefone2()+"',"+
		F.getMatricula()+",'"+
		F.getNome()+"','"+
		F.getFuncao()+"','"+
		F.getLogin()+"','"+
		F.getSenha()+"'"+","+"'"+"fooz" +"'"+","+"'"+"aes"+"'));";
		
		Statement conexao = JDBC.getsStatement();
		conexao.executeUpdate(sql);
		conexao.close();
	}
	
	
	/*  Consulta recebendo como parametro um 
	 *  numero inteiro e retornando um objeto
	 */
	public PessoaFuncionario consultaPessoaFuncionario(int codigo) 
	throws ClassNotFoundException, SQLException{
		String sql = "SELECT *FROM pessoafuncionario WHERE codfuncionario = " +codigo+";";
		Statement conexao = JDBC.getsStatement();
		ResultSet resultado = conexao.executeQuery(sql);
		
		ColEndereco ce = new ColEndereco();
		
		while (resultado.next()) {
			PessoaFuncionario pFunc = new PessoaFuncionario();
			pFunc.setEmail(resultado.getString("email"));
			int codEndereco = resultado.getInt("codEndereco");
			pFunc.setEnd(ce.consultarEndereco(codEndereco));
			pFunc.setTelefone(resultado.getString("telefone"));
			pFunc.setTelefone2(resultado.getString("telefone2"));
			pFunc.setMatricula(resultado.getInt("matricula"));			
			pFunc.setNome(resultado.getString("nome"));
			pFunc.setFuncao(resultado.getString("funcao"));
			return pFunc;
		}
		conexao.close();
		return null;
	}
	
	
	public PessoaFuncionario consultaFuncionarioNome(String nome) 
	throws ClassNotFoundException, SQLException{
		String sql = "SELECT *FROM pessoafuncionario WHERE nome = " +nome+";";
		Statement conexao = JDBC.getsStatement();
		ResultSet resultado = conexao.executeQuery(sql);
		
		ColEndereco ce = new ColEndereco();
		
		while (resultado.next()) {
			PessoaFuncionario pFunc = new PessoaFuncionario();
			pFunc.setEmail(resultado.getString("email"));
			int codEndereco = resultado.getInt("codEndereco");
			pFunc.setEnd(ce.consultarEndereco(codEndereco));
			pFunc.setTelefone(resultado.getString("telefone"));
			pFunc.setTelefone2(resultado.getString("telefone2"));
			pFunc.setMatricula(resultado.getInt("matricula"));			
			pFunc.setNome(resultado.getString("nome"));
			pFunc.setFuncao(resultado.getString("funcao"));
			return pFunc;
		}
		conexao.close();
		return null;
	}
	
	
	/*  Consulta recebendo como parametro uma 
	 *  string e retornando um vetor
	 */
	public Vector consultaFuncionarioFiltrada(String nome) 
	throws ClassNotFoundException, SQLException{
		String sql = "SELECT *FROM pessoafuncionario WHERE nome ILIKE " + "'" + "%"  +nome+ "%" + "'" + ";";
		Statement conexao = JDBC.getsStatement();
		ResultSet resultado = conexao.executeQuery(sql);
		
		ColEndereco ce = new ColEndereco();
		
		while (resultado.next()) {
			PessoaFuncionario pFunc = new PessoaFuncionario();
			pFunc.setEmail(resultado.getString("email"));
			int codEndereco = resultado.getInt("codEndereco");
			pFunc.setEnd(ce.consultarEndereco(codEndereco));
			pFunc.setTelefone(resultado.getString("telefone"));
			pFunc.setTelefone2(resultado.getString("telefone2"));
			pFunc.setMatricula(resultado.getInt("matricula"));			
			pFunc.setNome(resultado.getString("nome"));
			pFunc.setFuncao(resultado.getString("funcao"));
			funcionarios.add(pFunc);
		}
		conexao.close();
		return funcionarios;
	}
	
	
	// Lista o que estiver no banco retornando um vetor
	public Vector listarPessoaFuncionario() 
	throws ClassNotFoundException, SQLException{
		String sql = "SELECT *FROM pessoafuncionario;";
		Statement conexao = JDBC.getsStatement();
		ResultSet resultado = conexao.executeQuery(sql);
		
		ColEndereco ce = new ColEndereco();
		
		while(resultado.next()){
			PessoaFuncionario pFunc = new PessoaFuncionario();
			pFunc.setEmail(resultado.getString("email"));
			int codEndereco = resultado.getInt("codEndereco");
			pFunc.setEnd(ce.consultarEndereco(codEndereco));
			pFunc.setTelefone(resultado.getString("telefone"));
			pFunc.setTelefone2(resultado.getString("telefone2"));
			pFunc.setMatricula(resultado.getInt("matricula"));			
			pFunc.setNome(resultado.getString("nome"));
			pFunc.setFuncao(resultado.getString("funcao"));
			funcionarios.add(pFunc);
		}
		conexao.close();
		return funcionarios;
	}
	
	/*  Metodo de remove recebendo como
	 *  parametro um numero inteiro
	 */
	public void removerPessoaFuncionario(int codigo) 
	throws ClassNotFoundException, SQLException{
		String sql = "DELETE FROM pessoafuncionario where codfuncionario = "+codigo+";";
		Statement conexao = JDBC.getsStatement();
		conexao.executeUpdate(sql);
		conexao.close();
	}
	
	
	/*  Metodo de alteracao recebendo como
	 *  parametro todos os campos da tabela
	 */
	public void editarPessoaFuncionario(int codigo, String email, String telefone, String telefone2, int matricula, String nome, String funcao, String login, String senha) 
	throws ClassNotFoundException, SQLException{
		String sql = "UPDATE pessoafuncionario SET email = '"+email+"', telefone = '"+telefone+"', telefone2 = '"+telefone2+"', matricula = "+matricula+", nome = '"+nome+"', funcao = '"+funcao+"', login = '"+login+"', senha = encrypt ('"+senha+"',"+"'"+"fooz" +"'"+","+"'"+"aes"+"') WHERE codfuncionario = "+codigo+";";
		Statement conexao = JDBC.getsStatement();
		conexao.executeUpdate(sql);
		conexao.close();
	}
	
}
